'use strict';

// 导入uni-id-common模块
const uniID = require('uni-id-common');
// 使用相对路径引用uni_modules中的模块
const createConfigCenter = require('../../../uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/index.js');
const db = uniCloud.database();

/**
 * 获取用户信息云函数
 * @param {Object} event 客户端传入的参数
 * @param {String} event.token 用户token
 * @param {Object} context 上下文信息
 */
exports.main = async (event, context) => {
  const { token } = event;
  
  // 初始化配置中心
  const config = createConfigCenter({ pluginId: 'uni-id' });
  const uniIdConfig = config.config();
  
  // 初始化uniID实例
  const uniIDIns = uniID.createInstance({
    context,
    config: uniIdConfig
  });
  
  // 校验参数
  if (!token) {
    return {
      code: 1,
      message: '请先登录'
    };
  }
  
  try {
    // 校验token
    const checkTokenRes = await uniIDIns.checkToken(token);
    
    // 检查token是否有效
    if (checkTokenRes.code) {
      return {
        code: checkTokenRes.code,
        message: checkTokenRes.errMsg || '登录状态失效，请重新登录'
      };
    }
    
    // 获取用户ID
    const userId = checkTokenRes.uid;
    
    // 查询用户信息
    const userCollection = db.collection('uni-id-users');
    const userRes = await userCollection.doc(userId).get();
    
    // 检查用户是否存在
    if (!userRes.data) {
      return {
        code: 1,
        message: '用户不存在'
      };
    }
    
    // 返回用户信息，过滤敏感字段
    const userInfo = userRes.data;
    const safeUserInfo = {
      userId: userInfo._id,
      nickname: userInfo.nickname || '',
      avatar: userInfo.avatar || '',
      gender: userInfo.gender || 0,
      province: userInfo.province || '',
      city: userInfo.city || '',
      country: userInfo.country || '',
      language: userInfo.language || '',
      registerDate: userInfo.register_date || 0,
      lastLoginDate: userInfo.last_login_date || 0,
      role: userInfo.role || []
    };
    
    return {
      code: 0,
      message: '获取用户信息成功',
      data: safeUserInfo
    };
  } catch (error) {
    console.error('获取用户信息失败:', error);
    return {
      code: 1,
      message: '获取用户信息失败',
      data: error.message
    };
  }
};